package com.itheima.mp.domain.query;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.mp.domain.po.User;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
 * @author：余小小
 * @date：2024/7/18
 * @notes：分页查询
 */
@Data
@ApiModel(description = "分页查询通用对象")
public class PageQuery<T> {
    @ApiModelProperty("页码")
    private Long pageNo;
    @ApiModelProperty("当前页显示条数")
    private Long pageSize;
    @ApiModelProperty("排序字段")
    private String sortBy;
    @ApiModelProperty("是否升序")
    private Boolean isAsc;

    /**
     * 通用排序
     *
     * @param items
     * @param <T>
     * @return
     */
    public <T> Page<T> toMpPage(OrderItem... items) {
        Page<T> page = Page.of(pageNo, pageSize);
        // 排序字段
        if (StrUtil.isNotBlank(sortBy)) {
            // 升序
            page.addOrder(OrderItem.asc(sortBy));
        } else {
            // 降序
            page.addOrder(OrderItem.desc(sortBy));
        }
        return page;
    }


    public <T> Page<T> toMapPageDefaultortByCreateTime() {
        return toMpPage(OrderItem.desc("create_time"));
    }

    public <T> Page<T> toMapPageDefaultortByUpdateTime() {
        return toMpPage(OrderItem.desc("update_time"));
    }

    // 自定义降序字段
    public <T> Page<T> toMapPageDefaultortByCustom(String field) {
        return toMpPage(OrderItem.desc(field));
    }
}
